package com.link.speechdemo.speech;

import android.content.Context;
import android.os.Bundle;
import android.util.Log;

import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SynthesizerListener;
import com.link.speechdemo.MyApplication;
import com.link.speechdemo.Singleton;

/**
 * Created by link on 2016/11/1.
 */

public class SynthesizerSpeech {
    private Context context;

    public SynthesizerSpeech() {
        context = MyApplication.getGlobalContext();
    }

    public void init(String synText) {
        //1.创建SpeechSynthesizer对象, 第二个参数：本地合成时传InitListener
        SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(context, null);
        //2.合成参数设置，详见《科大讯飞MSC API手册(Android)》SpeechSynthesizer 类
        mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//设置发音人
        mTts.setParameter(SpeechConstant.SPEED, "50");//设置语速
        mTts.setParameter(SpeechConstant.VOLUME, "80");//设置音量，范围0~100
        mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置云端
        //设置合成音频保存位置（可自定义保存位置），保存在“./sdcard/iflytek.pcm”
        //保存在SD卡需要在AndroidManifest.xml添加写SD卡权限
        //如果不需要保存合成音频，注释该行代码
        mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");
        //3.开始合成
        mTts.startSpeaking(synText, mSynListener);
    }

    //合成监听器
    private SynthesizerListener mSynListener = new SynthesizerListener() {
        //开始播放
        @Override
        public void onSpeakBegin() {
            Log.e("SynthesizerSpeech", "播放了");
        }

        //缓冲进度回调
        // percent为缓冲进度0~100，beginPos为缓冲音频在文本中开始位置，endPos表示缓冲音频在 文本中结束位置，info为附加信息。
        @Override
        public void onBufferProgress(int percent, int beginPos, int endPos, String info) {

        }

        //暂停播放
        @Override
        public void onSpeakPaused() {

        }

        //恢复播放回调接口
        @Override
        public void onSpeakResumed() {

        }

        //percent为播放进度0~100,beginPos为播放音频在文本中开始位置，endPos表示播放音频在文 本中结束位置.
        @Override
        public void onSpeakProgress(int percent, int beginPos, int endPos) {
            Log.e("SynthesizerSpeech-end", percent+","+beginPos+","+endPos);
//            if (percent>94) {
//                understanderSpeech.init();
//                Log.e("SynthesizerSpeech-end","调用了");
//            }
        }

        //会话结束回调接口,没有错误时error为null
        @Override
        public void onCompleted(SpeechError speechError) {
                Singleton.getUInstance().init();
        }

        //会话事件回调接口
        @Override
        public void onEvent(int i, int i1, int i2, Bundle bundle) {

        }
    };
}
